package com.chentf.srb.sms.util;

import lombok.Data;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @author chentengfei
 * @desc 短信服务配置类,获取application.yml中配置的属性
 * @date 2021-11-13 11:23:06
 */
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.sms")
public class SmsProperties implements InitializingBean {

    //SpringBoot Configuration Annotation Processor not found in classpath配置文件自动感知配置属性,idea工具报红的解决办法?

    /***
     在做项目的时候需要使用代码实现读取properties文件内容，使用@value(name="xxx")去读取，但是当参数变多的时候，通过@value操作就显得臃肿。
     springboot提供了更加简单的操作：那就是通过@ConfigurationProperties一次性读取并映射到javabean。
     注意：
        1：此注解只适合项目有一个属性文件，如果大型项目用到了多个属性文件，需要另做处理，需指定@ConfigurationProperties读取的属性文件！
            @ConfigurationProperties(prefix = "dolphin", locations = "classpath:dolphin.properties")
        2：默认读取的是properties文件，可能有的项目配置的yml格式，所以要注意符合的变化点要编程冒号！
            @ConfigurationProperties(ignoreUnknownFields = false, prefix = "ftp:client")
     */

//    region-id: cn-hangzhou
//    key-id: LTAI4G5Svnb2TWBMuKnNT6jY
//    key-secret: N7v6R4V3EJ1SGDZlsqtqo8QyVVMmtQ
//    template-code: SMS_96695065
//    sign-name: 谷粒
    //此处的application.yml中配置的属性会根据驼峰规则映射到成员属性上
    private String regionId;
    private String keyId;
    private String keySecret;
    private String templateCode;
    private String signName;

    //此处定义静态成员属性的是通过下面的方法,在初始化将上面的成员属性赋值给静态成员属性
    public static String REGION_Id;
    public static String KEY_ID;
    public static String KEY_SECRET;
    public static String TEMPLATE_CODE;
    public static String SIGN_NAME;

    //InitializingBean接口为bean提供了初始化方法的方式，
    //它只包括afterPropertiesSet方法，凡是继承该接口的类，在初始化bean的时候都会执行该方法
    @Override
    public void afterPropertiesSet() throws Exception {
        //此处含义是在初始化bean的时候将成员属性的值赋值给静态成员属性,方便通过类名.静态属性直接调用.
        REGION_Id = regionId;
        KEY_ID = keyId;
        KEY_SECRET = keySecret;
        TEMPLATE_CODE = templateCode;
        SIGN_NAME = signName;
    }
}
